﻿<?xml version="1.0" encoding="utf-8"?>

<xsd:schema
    targetNamespace="http://metalx.org/i386/Functions/Class"
    elementFormDefault="qualified"
    xmlns="http://metalx.org/i386/Functions/Class"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">

	<xsd:element name="GetName">
		<xsd:annotation>
			<xsd:documentation>
				Gets the name of a class.

				Input:
				SI=Class

				Output:
				SI=Name
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType/>
	</xsd:element>

	<xsd:element name="GetNamespace">
		<xsd:annotation>
			<xsd:documentation>
				Gets the namespace of a class.

				Input:
				SI=Class

				Output:
				SI=Namespace
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType/>
	</xsd:element>

	<xsd:element name="GetBase">
		<xsd:annotation>
			<xsd:documentation>
				Gets the base type of a class.

				Input:
				SI=Class

				Output:
				SI=Type
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType/>
	</xsd:element>

	<xsd:element name="GetFields">
		<xsd:annotation>
			<xsd:documentation>
				Gets the list of fields in a class.

				Input:
				SI=Class

				Output:
				SI=Fields
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType/>
	</xsd:element>

	<xsd:element name="GetMethods">
		<xsd:annotation>
			<xsd:documentation>
				Gets the list of instance methods in a class.

				Input:
				SI=Class

				Output:
				SI=Methods
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType/>
	</xsd:element>

	<xsd:element name="FindMethod">
		<xsd:annotation>
			<xsd:documentation>
				Finds an instance method on a class by name.

				Input:
				SI=Class
				DI=MethodName

				Output:
				ZF=MethodFound
				SI=Method

				Modifies: CX
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType/>
	</xsd:element>
	
	<xsd:element name="GetStaticMethods">
		<xsd:annotation>
			<xsd:documentation>
				Gets the list of static methods in a class.

				Input:
				SI=Class

				Output:
				SI=Methods
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType/>
	</xsd:element>

	<xsd:element name="FindStaticMethod">
		<xsd:annotation>
			<xsd:documentation>
				Finds a static method on a class by name.

				Input:
				SI=Class
				DI=MethodName

				Output:
				ZF=MethodFound
				SI=Method

				Modifies: CX DX SI
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType/>
	</xsd:element>

	<xsd:element name="FindField">
		<xsd:annotation>
			<xsd:documentation>
				Finds field on a class by name.

				Input:
				SI=Class
				DI=FieldName

				Output:
				ZF=FieldFound
				SI=Field

				Modifies: CX
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType/>
	</xsd:element>
	
	<xsd:element name="IsStatic">
		<xsd:annotation>
			<xsd:documentation>
				Returns true if the specified class is static.

				Input:
				SI=Class

				Output:
				ZF=IsStatic
				
				Modifies: AX
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType/>
	</xsd:element>

	<xsd:element name="GetMethodName">
		<xsd:annotation>
			<xsd:documentation>
				Gets the name of a method.

				Input:
				SI=Method

				Output:
				SI=Name
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType/>
	</xsd:element>

	<xsd:element name="GetMethodType">
		<xsd:annotation>
			<xsd:documentation>
				Gets the return type of a method.

				Input:
				SI=Method

				Output:
				SI=TypeName
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType/>
	</xsd:element>

	<xsd:element name="GetMethodEntryPoint">
		<xsd:annotation>
			<xsd:documentation>
				Gets the entry point of a method.

				Input:
				SI=Method

				Output:
				SI=EntryPoint
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType/>
	</xsd:element>

	<xsd:element name="GetMethodParameters">
		<xsd:annotation>
			<xsd:documentation>
				Gets the parameter collection of a method.

				Input:
				SI=Method

				Output:
				SI=Parameters
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType/>
	</xsd:element>

	<xsd:element name="GetParameterName">
		<xsd:annotation>
			<xsd:documentation>
				Gets the name of a parameter.

				Input:
				SI=Parameter

				Output:
				SI=Name
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType/>
	</xsd:element>

	<xsd:element name="GetParameterType">
		<xsd:annotation>
			<xsd:documentation>
				Gets the type of a field.

				Input:
				SI=Parameter

				Output:
				SI=TypeName
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType/>
	</xsd:element>

	<xsd:element name="IsMethodStatic">
		<xsd:annotation>
			<xsd:documentation>
				Returns true if the specified method is static.

				Input:
				SI=Method

				Output:
				ZF=IsStatic
				
				Modifies: AX SI
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType/>
	</xsd:element>

	<xsd:element name="ExecuteMethod">
		<xsd:annotation>
			<xsd:documentation>
				Executes a method on an object or class.

				Input:
				BX=Class
				BP=Arguments
				SI=Method
				DI=Object

				Output:
				DI=ReturnValue
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:attribute name="class"/>
			<xsd:attribute name="method"/>
		</xsd:complexType>
	</xsd:element>
	
	<xsd:element name="GetFieldName">
		<xsd:annotation>
			<xsd:documentation>
				Gets the name of a field.

				Input:
				SI=Field

				Output:
				SI=Name
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType/>
	</xsd:element>

	<xsd:element name="GetFieldType">
		<xsd:annotation>
			<xsd:documentation>
				Gets the type of a field.

				Input:
				SI=Field

				Output:
				SI=TypeName
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType/>
	</xsd:element>

	<xsd:element name="GetFieldValue">
		<xsd:annotation>
			<xsd:documentation>
				Gets the current value of a field on an object.

				Input:
				SI=Field
				DI=Object

				Output:
				DI=Value
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType/>
	</xsd:element>

	<xsd:element name="GetFieldPosition">
		<xsd:annotation>
			<xsd:documentation>
				Gets the relative position of a field.

				Input:
				SI=Field

				Output:
				AX=Position
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType/>
	</xsd:element>

	<xsd:element name="CreateObject">
		<xsd:annotation>
			<xsd:documentation>
				Creates a new class object from a class structure.

				Input:
				DI=Class

				Output:
				DI=Object
				
				Modifies: AX BX DX
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType/>
	</xsd:element>

</xsd:schema>
